package Modelo;

public abstract class Superficie {
	
	protected Construccion construccion;
	
	public void construir(Construccion construccion){
		this.construccion = construccion;
		construccion.asignarLugarDeConstruccion(this); 
	}
	
	public boolean tieneConstruccion(){
		return (this.construccion != null);
	}
	
	/*
	 * Si la superficie no tiene una construccion no resta danio
	 */
	public void modificarEstadoConstruccion(float porcentajeAModificar){
		if(this.tieneConstruccion()){
			if(porcentajeAModificar <= this.construccion.obtenerEstado()){
				construccion.daniarEnPorcentaje(porcentajeAModificar);
			}
			else{
				construccion.daniarEnPorcentaje(this.construccion.obtenerEstado());
			}
		}
	}
	
	public float obtenerEstadoConstruccion(){
		if(!this.tieneConstruccion()){
			return -1;
		}else{
		return construccion.obtenerEstado();
		}
	}
	
	public Construccion obtenerConstruccion(){
		return this.construccion;
	}

	public boolean tieneLuz(){
		
		return false;
	}
	
	public boolean tieneTuberiaDeAgua(){
		return false;
	}
	
	public abstract void crearTuberiaDeAgua();
	
	
	public abstract boolean tieneLineaDeTension();

	public abstract boolean puedoConstruirResidencia();

	public abstract boolean puedoConstruirComercio();

	public abstract boolean puedoConstruirIndustria();

	public abstract boolean puedoConstruirEdificioTerrestre();

	public abstract boolean puedoConstruirPozoDeAgua();
	
	public float obtenerDiferenciaEstadoConstruccion(){
		if(this.tieneConstruccion()){
			Construccion construccion = this.obtenerConstruccion();
			return (construccion.estadoEstructura-construccion.estadoEstructuraAnterior);
		}else{
			return 0;
		}
	}

	public float obtenerDanioSiPasaGodzilla() {
		if(this.tieneConstruccion()){
			Construccion construccion = this.obtenerConstruccion();
			return construccion.obtenerDanioSiPasaGodzilla();
		}else{
		return 0;
		}
	}

	public int obtenerPoblacion() {
		
		if(this.tieneConstruccion()){
			Construccion construccion = this.obtenerConstruccion();
			return construccion.obtenerPoblacion();
		}else{
		return 0;
		}
	}

	public void eliminarConstruccion() {
		this.construccion = null;
		
	}

}